﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SVC_BLL;
using ImprimeCupom;

namespace SVC.RELATORIOS
{
    public partial class frm_Fechamento : Form
    {
        public frm_Fechamento()
        {
            InitializeComponent();
        }
        public Double TotalFinal = 0;
        FechamentoCaixaBLL objFC = new FechamentoCaixaBLL();

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == Keys.Escape)
                this.Close();
            return base.ProcessCmdKey(ref msg, keyData);
        } 

        private void frm_Fechamento_Load(object sender, EventArgs e)
        {
            try
            {
                Double SaldoInicial = 0, ContasRecebidas = 0, ContasPagas =0;
                this.MaximizeBox = false;
                this.MaximumSize = new Size(this.Width, this.Height);
                this.MinimumSize = new Size(this.Width, this.Height);
                DataTable tab = objFC.CaixaInicial();
                if (tab.Rows.Count > 0)
                {
                    lSaldoInicial.Text = tab.Rows[0][0].ToString();
                    lSaldoInicial.Text = Convert.ToDouble(lSaldoInicial.Text).ToString("C");
                    SaldoInicial = Double.Parse(tab.Rows[0][0].ToString());
                }
                else
                {
                    AberturaCaixaBLL objAC = new AberturaCaixaBLL();
                    objAC.PrimeiroDia();
                    if (objAC.valor > 0)
                    {
                        lSaldoInicial.Text = objAC.valor.ToString();
                        lSaldoInicial.Text = Convert.ToDouble(lSaldoInicial.Text).ToString("C");
                        SaldoInicial = Double.Parse(objAC.valor.ToString());
                    }
                    else
                    {
                        lSaldoInicial.Text = "0";
                        lSaldoInicial.Text = Convert.ToDouble(lSaldoInicial.Text).ToString("C");
                    }
                }

                tab = objFC.FechamentoTotalDia();
                if(tab.Rows.Count == 2)
                {
                    lContasPagas.Text = "0";
                    lContasPagas.Text = Convert.ToDouble(lContasPagas.Text).ToString("C");
                    Double.TryParse(lContasPagas.Text, out ContasPagas);
                }
                for (int i = 0; i < tab.Rows.Count; i++)
                {
                    if (tab.Rows[i][0].ToString() == "Contas Pagas")
                    {
                        if (tab.Rows[i][1] != null)
                        {
                            lContasPagas.Text = tab.Rows[i][1].ToString();
                            if (lContasPagas.Text == "")
                                lContasPagas.Text = "0";
                            lContasPagas.Text = Convert.ToDouble(lContasPagas.Text).ToString("C");
                            Double.TryParse(tab.Rows[i][1].ToString(), out ContasPagas);
                        }
                        
                    }
                    else if (tab.Rows[i][0].ToString() == "Contas Recebidas")
                    {
                        if (tab.Rows[i][1] != null)
                        {
                            lTotalContasRecebidas.Text = tab.Rows[i][1].ToString();
                            if (lTotalContasRecebidas.Text == "")
                                lTotalContasRecebidas.Text = "0";
                            lTotalContasRecebidas.Text = Convert.ToDouble(lTotalContasRecebidas.Text).ToString("C");
                            Double.TryParse(tab.Rows[i][1].ToString(), out ContasRecebidas);
                        }
                    }
                    else if (tab.Rows[i][0].ToString() == "Vendas Realizadas")
                    {
                        if (tab.Rows[i][1] != null)
                        {
                            lTotalVendas.Text = tab.Rows[i][1].ToString();
                            if (lTotalVendas.Text == "")
                                lTotalVendas.Text = "0";
                            lTotalVendas.Text = Convert.ToDouble(lTotalVendas.Text).ToString("C");
                        }
                    }
                }
                TotalFinal = SaldoInicial + ContasRecebidas - ContasPagas;
                lTotalFinal.Text = TotalFinal.ToString();
                lTotalFinal.Text = Convert.ToDouble(lTotalFinal.Text).ToString("C");

                UsuarioBLL objUsu = new UsuarioBLL();
                objUsu.localizar(global.codUsuario.ToString(), "usu_codigo");
                lUsuario.Text = objUsu.usu_nome;
                objUsu = null;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }  
        }

        private void btGerar_Click(object sender, EventArgs e)
        {
            try
            {
                RELATORIOS.frm_Relatorio frm = new RELATORIOS.frm_Relatorio();
                frm.controle = "Fechamento";
                frm.ShowDialog();
                frm = null;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                if (objFC.JaFechou())
                    throw new Exception("Fechamento diário já foi realizado");
                objFC.limpar();
                objFC.data = DateTime.Now.Date;
                objFC.hora = TimeSpan.FromHours(DateTime.Now.Hour) + TimeSpan.FromMinutes(DateTime.Now.Minute) + TimeSpan.FromSeconds(DateTime.Now.Second);
                objFC.usuario = global.codUsuario;
                objFC.valor = TotalFinal;
                objFC.inserir();
                MessageBox.Show("Fechamento do Dia Realizado", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void bImprimir_Click(object sender, EventArgs e)
        {
            try
            {


                String impressora = "LPT";
                int tentativa = 0;
                int COM = 0;
            loop:
                ImprimeTexto imp = new ImprimeTexto();
                if (tentativa == 3)
                {
                    COM++;
                    impressora = "COM";
                    imp.Inicio(impressora + COM.ToString());
                }
                else
                {
                    tentativa++;
                    imp.Inicio(impressora + tentativa.ToString());
                }
                String data = "Data: " + DateTime.Now.Day.ToString() + "/" + DateTime.Now.Month.ToString() + "/" + DateTime.Now.Year
                   + " " + DateTime.Now.Hour.ToString() + ":" + DateTime.Now.Minute.ToString() + ":" + DateTime.Now.Second.ToString();
                imp.ImpLF(data);
                imp.ImpLF("Operador: " + lUsuario.Text);
                imp.ImpLF("Saldo Inicial: " + lSaldoInicial.Text);
                imp.ImpLF("Total de Vendas: " + lTotalVendas.Text);
                imp.ImpLF("Total de Contas Recebidas: " + lTotalContasRecebidas.Text);
                imp.ImpLF("Total de Contas Pagas: " + lContasPagas.Text);
                imp.ImpLF("Total Final: " + lTotalFinal.Text);
                imp.Pula(10);
                if (!imp.Fim())
                {
                    if (COM < 5)
                    {
                        imp = null;
                        goto loop;
                    }
                    else
                        throw new Exception("Nenhuma impressora foi localizada");
                }
                imp = null;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }
    }
}
